package slice

// InterSect  获取两个切片中的相同元素， 去重并返回
func InterSect[T comparable](src []T, dst []T) []T {
	srcMap := ToMap(src)
	var ret = make([]T, 0, len(src))
	for _, val := range dst {
		if _, ok := srcMap[val]; ok {
			ret = append(ret, val)
		}
	}
	return Nodup(ret)
}

// InterSectFunc  自定义获取两个切片中的相同元素， 去重并返回
func InterSectFunc[T comparable](src []T, dst []T, Contains func(src, dst T) bool) []T {
	var ret = make([]T, 0, len(src))
	for _, val := range dst {
		if ContainsFunc(src, func(src T) bool {
			return Contains(src, val)
		}) {
			ret = append(ret, val)
		}
	}
	return Nodup(ret)
}
